﻿Public Class ABM_ProductoXProveedor
    Dim acceso As New acceso
    Dim comando As New SqlClient.SqlCommand
    Dim esnuevo As Boolean
    Dim ProductoXProveedor As New ProductoXProveedor()
    Dim funciones As New Funciones

    Private Sub ABM_ProductoXProveedor_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        habilitacion(True)
        cargarGrilla()
        cargarGrillaProductos()
        cargarGrillaProveedores()
        blanquear()
        esnuevo = True
        btn_nuevo_Click(sender, e)
    End Sub
    Private Sub habilitacion(ByVal x As Boolean)
        btn_eliminar.Enabled = x
        btn_guardar.Enabled = x

    End Sub
    Private Sub cargarGrilla()
        Dim tabla As New Data.DataTable()
        tabla = acceso.leo_tabla("VistaProductoXProveedor")
        dgv_Productos_X_Proveedores.DataSource = tabla
        acomodarGrilla()
    End Sub
    Private Sub cargarGrillaProductos()
        Dim tabla As New Data.DataTable()
        tabla = acceso.leo_tabla("VistaProductos")
        dgv_Productos.DataSource = tabla
        acomodarGrillaProductos()
    End Sub
    Private Sub cargarGrillaProveedores()
        Dim tabla As New Data.DataTable()
        tabla = acceso.leo_tabla("VistaProveedores")
        dgv_Proveedores.DataSource = tabla
        acomodarGrillaProveedores()
    End Sub

    Private Sub acomodarGrilla()
        dgv_Productos_X_Proveedores.Columns("razonSocial").HeaderText = "Proveedor"
        dgv_Productos_X_Proveedores.Columns("nombre").HeaderText = "Producto"
        dgv_Productos_X_Proveedores.Columns("codProductoProveedor").HeaderText = "Codigo del Producto del Proveedor"
        dgv_Productos_X_Proveedores.Columns("precioProveedor").HeaderText = "Costo"
        dgv_Productos_X_Proveedores.Columns("unidadMedida").HeaderText = "Unidad Medida"
        dgv_Productos_X_Proveedores.Columns("marca").HeaderText = "Marca"
        dgv_Productos_X_Proveedores.Columns("tipoProducto").HeaderText = "Tipo Producto"
        dgv_Productos_X_Proveedores.Columns("nroProveedor").Visible = False
        dgv_Productos_X_Proveedores.Columns("codProducto").Visible = False
        dgv_Productos_X_Proveedores.Columns("idMarca").Visible = False
        dgv_Productos_X_Proveedores.Columns("idTipoProducto").Visible = False
        dgv_Productos_X_Proveedores.Columns("idUnidad").Visible = False
    End Sub
    Private Sub acomodarGrillaProveedores()

        dgv_Proveedores.Columns("razonSocial").HeaderText = "Proveedor"
        dgv_Proveedores.Columns("cuit").HeaderText = "CUIT"
        dgv_Proveedores.Columns("nombre").HeaderText = "Nombre Contacto"
        dgv_Proveedores.Columns("apellido").HeaderText = "Apellido Contacto"
        dgv_Proveedores.Columns("email").HeaderText = "Email"
        dgv_Proveedores.Columns("localidad").HeaderText = "Localidad"
        dgv_Proveedores.Columns("provincia").HeaderText = "Provincia"
        dgv_Proveedores.Columns("razonSocial").Width = 90
        dgv_Proveedores.Columns("cuit").Width = 80
        dgv_Proveedores.Columns("nombre").Width = 80
        dgv_Proveedores.Columns("apellido").Width = 80
        dgv_Proveedores.Columns("email").Width = 80
        dgv_Proveedores.Columns("localidad").Width = 70
        dgv_Proveedores.Columns("provincia").Width = 70
        dgv_Proveedores.Columns("nroProveedor").Visible = False
        dgv_Proveedores.Columns("responsableInscripto").Visible = False
        dgv_Proveedores.Columns("tipoDoc").Visible = False
        dgv_Proveedores.Columns("documento").Visible = False
        dgv_Proveedores.Columns("barrio").Visible = False
        dgv_Proveedores.Columns("calle").Visible = False
        dgv_Proveedores.Columns("numero").Visible = False
        dgv_Proveedores.Columns("piso").Visible = False
        dgv_Proveedores.Columns("departamento").Visible = False
        dgv_Proveedores.Columns("idTipoDocumento").Visible = False
        dgv_Proveedores.Columns("idLocalidad").Visible = False
        dgv_Proveedores.Columns("idProvincia").Visible = False
        dgv_Proveedores.Columns("idPersona").Visible = False
        dgv_Proveedores.Columns("idDireccion").Visible = False
        dgv_Proveedores.Columns("idResponsable").Visible = False

    End Sub
    Private Sub acomodarGrillaProductos()
        dgv_Productos.Columns("codProducto").Visible = False
        dgv_Productos.Columns("nombre").HeaderText = "Producto"
        dgv_Productos.Columns("unidadMedida").HeaderText = "Unidad de Medida"
        dgv_Productos.Columns("precio").Visible = False
        dgv_Productos.Columns("marca").HeaderText = "Marca"
        dgv_Productos.Columns("tipoProducto").HeaderText = "Tipo de Producto"
        dgv_Productos.Columns("idTipoProducto").Visible = False
        dgv_Productos.Columns("stockRiesgo").Visible = False
        dgv_Productos.Columns("idMarca").Visible = False
        dgv_Productos.Columns("idUnidadMedida").Visible = False
        dgv_Productos.Columns("stockActual").Visible = False
        dgv_Productos.Columns("stockDisponible").Visible = False
        dgv_Productos.Columns("stockReservado").Visible = False

    End Sub

    Private Sub blanquear()
        msk_cod_Producto_Proveedor.Text = ""
        txt_precio_proveedor.Text = ""
        If dgv_Proveedores.SelectedRows.Count <> 0 Then
            dgv_Proveedores.ClearSelection()
        End If
        If dgv_Productos.SelectedRows.Count <> 0 Then
            dgv_Productos.ClearSelection()
        End If
        If dgv_Productos_X_Proveedores.SelectedRows.Count <> 0 Then
            dgv_Productos_X_Proveedores.ClearSelection()
        End If



    End Sub

    Private Sub btn_nuevo_producto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_nuevo_producto.Click
        ABMProductos.ShowDialog()
        cargarGrillaProductos()
    End Sub

    Private Sub btn_nuevo_proveedor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_nuevo_proveedor.Click
        ABM_Proveedores.ShowDialog()
        cargarGrillaProveedores()
    End Sub

    Private Sub btn_nuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_nuevo.Click
        blanquear()
        btn_guardar.Enabled = True
        dgv_Productos.Enabled = True
        dgv_Proveedores.Enabled = True
        esnuevo = True
    End Sub

    Private Sub dgv_Productos_X_Proveedores_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dgv_Productos_X_Proveedores.Click
        If dgv_Productos_X_Proveedores.SelectedRows.Count <> 0 Then
            For i As Integer = 0 To dgv_Productos.Rows.Count Step 1
                If dgv_Productos_X_Proveedores.CurrentRow.Cells("codProducto").Value = dgv_Productos.Rows(i).Cells("codProducto").Value Then
                    dgv_Productos.Rows(i).Selected = True
                    Exit For
                End If
            Next
            For i As Integer = 0 To dgv_Proveedores.Rows.Count Step 1
                If dgv_Productos_X_Proveedores.CurrentRow.Cells("nroProveedor").Value = dgv_Proveedores.Rows(i).Cells("nroProveedor").Value Then
                    dgv_Proveedores.Rows(i).Selected = True
                    Exit For
                End If
            Next
            txt_precio_proveedor.Text = dgv_Productos_X_Proveedores.CurrentRow.Cells("precioProveedor").Value
            If IsDBNull(dgv_Productos_X_Proveedores.CurrentRow.Cells("codProductoProveedor").Value) Then
                msk_cod_Producto_Proveedor.Text = ""
            Else
                msk_cod_Producto_Proveedor.Text = dgv_Productos_X_Proveedores.CurrentRow.Cells("codProductoProveedor").Value
            End If

            esnuevo = False
            dgv_Productos.Enabled = False
            dgv_Proveedores.Enabled = False
        End If

    End Sub
    Private Sub txt_precio_proveedor_KeyPress(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.KeyPressEventArgs) Handles txt_precio_proveedor.KeyPress, txt_precio_proveedor.KeyPress
        eventArgs.Handled = Funciones.validarDouble(eventArgs.KeyChar, txt_precio_proveedor.Text & CChar(eventArgs.KeyChar))
    End Sub

    Private Sub btn_eliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_eliminar.Click
        If dgv_Productos_X_Proveedores.SelectedRows.Count <> 0 Then
            ProductoXProveedor._Proveedor._idProveedor = dgv_Productos_X_Proveedores.SelectedRows(0).Cells("nroProveedor").Value
            ProductoXProveedor._Proveedor._razonSocial = dgv_Productos_X_Proveedores.SelectedRows(0).Cells("razonSocial").Value
            ProductoXProveedor._Producto._codProducto = dgv_Productos_X_Proveedores.SelectedRows(0).Cells("codProducto").Value
            ProductoXProveedor._Producto._nombre = dgv_Productos_X_Proveedores.SelectedRows(0).Cells("nombre").Value
            If MessageBox.Show("Esta seguro de querer eliminar el producto: " & ProductoXProveedor._Producto._nombre & vbLf & " del Proveedor: " & ProductoXProveedor._Proveedor._razonSocial _
            , "ATENCION", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = Windows.Forms.DialogResult.Yes Then
                Dim sql As String

                sql = "DELETE ProductoXProveedor WHERE nroProveedor = @nroProveedor and codProducto = @codProducto"
                comando = New Data.SqlClient.SqlCommand
                comando.Parameters.AddWithValue("@nroProveedor", ProductoXProveedor._Proveedor._idProveedor)
                comando.Parameters.AddWithValue("@codProducto", ProductoXProveedor._Producto._codProducto)
                acceso.ejecutarActualizaciones(sql, comando)

                cargarGrilla()
                blanquear()
                esnuevo = True

            End If

        End If
    End Sub

    Private Sub btn_salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_salir.Click
        If MessageBox.Show("¿ Desea salir del ABM de Producto Por Proveedor ?", "Atención", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
            Me.Close()
        End If
    End Sub

    Private Sub btn_guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_guardar.Click

        If txt_precio_proveedor.Text = "" Then
            MessageBox.Show("El campo Precio no puequede quedar vacio, porfavor escriba uno.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txt_precio_proveedor.Focus()
            Return
        End If
        If dgv_Productos.SelectedRows.Count = 0 Then
            MessageBox.Show("Por favor seleccione un producto a asociar.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Return
        End If
        If dgv_Proveedores.SelectedRows.Count = 0 Then
            MessageBox.Show("Por favor seleccione un proveedor a asociar.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Return
        End If
        If msk_cod_Producto_Proveedor.Text <> "" Then
            ProductoXProveedor._codProductoProveedor = msk_cod_Producto_Proveedor.Text
        End If

        ProductoXProveedor._precioProveedor = txt_precio_proveedor.Text
        ProductoXProveedor._Producto._codProducto = dgv_Productos.SelectedRows(0).Cells("codProducto").Value
        ProductoXProveedor._Proveedor._idProveedor = dgv_Proveedores.SelectedRows(0).Cells("nroProveedor").Value
        ProductoXProveedor._Producto._nombre = dgv_Productos.SelectedRows(0).Cells("nombre").Value
        ProductoXProveedor._Proveedor._razonSocial = dgv_Proveedores.SelectedRows(0).Cells("razonSocial").Value
        If esnuevo = True Then
            If sePuedeInsertar() = True Then
                insertProductoXProveedor()
                MessageBox.Show("Nuevo Producto Por Proveedor cargado con exito", "ATENCION", MessageBoxButtons.OK, MessageBoxIcon.None)
                cargarGrilla()
                blanquear()
            Else
                MessageBox.Show("Ya se tiene cargado el producto: " & ProductoXProveedor._Producto._nombre & " al Proveedor: " & ProductoXProveedor._Proveedor._razonSocial, "ATENCION", MessageBoxButtons.OK, MessageBoxIcon.None)
            End If
        Else
            updateProductoXProveedor()
            MessageBox.Show("Producto Por Proveedor actualizado con exito", "ATENCION", MessageBoxButtons.OK, MessageBoxIcon.None)
            cargarGrilla()
            blanquear()
        End If
    End Sub
    Public Sub insertProductoXProveedor()
        Dim sql As String
        comando = New Data.SqlClient.SqlCommand

        If msk_cod_Producto_Proveedor.Text <> "" Then
            sql = "Insert INTO ProductoXProveedor (codProducto,nroProveedor,codProductoProveedor,precioProveedor)"
            sql &= " VALUES (@codProducto,@nroProveedor,@codProductoProveedor,@precioProveedor)"
            comando.Parameters.AddWithValue("@codProductoProveedor", ProductoXProveedor._codProductoProveedor)
        Else
            sql = "Insert INTO ProductoXProveedor (codProducto,nroProveedor,precioProveedor)"
            sql &= " VALUES (@codProducto,@nroProveedor,@precioProveedor)"
        End If
        comando.Parameters.AddWithValue("@codProducto", ProductoXProveedor._Producto._codProducto)
        comando.Parameters.AddWithValue("@nroProveedor", ProductoXProveedor._Proveedor._idProveedor)
        comando.Parameters.AddWithValue("@precioProveedor", ProductoXProveedor._precioProveedor)
        acceso.ejecutarActualizaciones(sql, comando)
    End Sub
    Public Sub updateProductoXProveedor()
        Dim sql As String
        comando = New Data.SqlClient.SqlCommand
        If msk_cod_Producto_Proveedor.Text <> "" Then
            sql = "UPDATE ProductoXProveedor SET codProductoProveedor = @codProductoProveedor, precioProveedor = @precioProveedor"
            sql &= " where codProducto = @codProducto and nroProveedor = @nroProveedor"
            comando.Parameters.AddWithValue("@codProductoProveedor", ProductoXProveedor._codProductoProveedor)
        Else
            sql = "UPDATE ProductoXProveedor SET precioProveedor = @precioProveedor"
            sql &= " where codProducto = @codProducto and nroProveedor = @nroProveedor"
        End If
        comando.Parameters.AddWithValue("@codProducto", ProductoXProveedor._Producto._codProducto)
        comando.Parameters.AddWithValue("@nroProveedor", ProductoXProveedor._Proveedor._idProveedor)
        comando.Parameters.AddWithValue("@precioProveedor", ProductoXProveedor._precioProveedor)
        acceso.ejecutarActualizaciones(sql, comando)
    End Sub
    Public Function sePuedeInsertar() As Boolean
        Dim sePuede As Boolean = False
        Dim tabla As New DataTable()
        tabla = acceso.ejecutar("Select * from VistaProductoXProveedor where nroProveedor = " & ProductoXProveedor._Proveedor._idProveedor & " and codProducto = " & ProductoXProveedor._Producto._codProducto)
        If tabla.Rows.Count = 0 Then
            sePuede = True
        End If
        Return sePuede
    End Function
End Class